package com.ada.spark.rddoperator

import org.apache.spark.{SparkConf, SparkContext}

/**
  * 作用：在一个(K,V)的RDD上调用，K必须实现Ordered接口，返回一个按照key进行排序的(K,V)的RDD
  */
object Spark25_sortByKey {

    def main(args: Array[String]): Unit = {
        //创建SparkConf
        val conf = new SparkConf().setAppName("Spark25_sortByKey").setMaster("local[*]")
        //创建Spark上下文对象
        val sc = new SparkContext(conf)

        val rdd = sc.parallelize(Array((3, "aa"), (6, "cc"), (2, "bb"), (1, "dd")))

        //分区情况
        rdd.glom().collect().foreach(datas => println(datas.mkString(",")))
        //分区0：(3,aa)
        //分区1：(6,cc)
        //分区2：(2,bb)
        //分区3：(1,dd)

        //在一个(K,V)的RDD上调用，K必须实现Ordered接口，返回一个按照key进行排序的(K,V)的RDD
        val sortByKeyRDD = rdd.sortByKey(true)

        println(sortByKeyRDD.collect().mkString(","))
        //(1,dd),(2,bb),(3,aa),(6,cc)

        val sortByKeyRDD2 = rdd.sortByKey(false)
        println(sortByKeyRDD2.collect().mkString(","))
        //(6,cc),(3,aa),(2,bb),(1,dd)
    }

}
